
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/wait.h>
#define SIZE 256
#define NUM 16
int main(){
  //命令字符串
  char cmd[SIZE];
  //提示符
  const char* cmd_line = "[minishell@CentOS]$";
  //shell循环读取命令执行
  while(1){
    //初始化获取到的命令字符串
    cmd[0]=0;
    //让提示符一直打印到前面
    printf("%s",cmd_line);
    //捕获输入的命令到cmd里
    fgets(cmd,SIZE,stdin);
    //获取到的命令字符串最后一个\n去掉
    cmd[strlen(cmd)-1]='\0';
    //定义指针数组用来保存解析后的字符串 
    char* args[NUM];
    /////////////////////////////////
    //解析命令字符串
    args[0]=strtok(cmd," ");
    int i=1;
    do{
      args[i]=strtok(NULL," ");
      if(args[i]==NULL){
        break;
      }
      ++i;
    }while(1);
    
    //////////////////////////////
    //字符串解析完毕
    //
    //创建子进程并对命令进行处理
    pid_t id = fork();
    if(id < 0){
      perror("fork error!\n");
      continue;
    }
    if(id==0){
      //child  
      //子进程内调用进程替换函数
      //
      execvp(args[0],args);
      exit(1);
    }

    //父进程等待子进程处理
    int st;
    pid_t ret = waitpid(id,&st,0);

    if(WIFEXITED(st)&&ret == id){
      if(WEXITSTATUS(st)==1){
        printf("-bash: %s: command not found\n",args[0]);
      }
    }
  }
  return 0;
}
